// 父类：公共属性和方法
function Person() {
  this.name = "why"
  this.friends = []
}

Person.prototype.eating = function() {
  console.log(this.name + " eating")
}

// 子类：特有属性和方法
function Student() {
  this.sno = 111
}

Student.prototype = new Person() // Student 的显示原型 prototype 指向 Person 类的对象

Student.prototype.studying = function() {
  console.log(this.name + " studying")
}

var stu = new Student()
console.log(stu.name) // why
stu.eating() // why eating


// 原型链实现继承的弊端：
// 1. 打印 stu 对象，继承的属性是看不到的
console.log(stu) // 无 name 属性

// 2. 创建出来两个 stu 对象
var stu1 = new Student()
var stu2 = new Student()

// 直接修改对象上的属性，是给本对象添加了一个新属性
stu1.name = "kobe"
console.log(stu2.name) // why

// 获取引用，修改里面的值，会相互影响
stu1.friends.push("kobe")

console.log(stu1.friends) // ['kobe']
console.log(stu2.friends) // ['kobe']

// 3. 在例子实现类的过程中都没有传递参数